package com.oweight.sagacious.payment.domain.model;

import cn.hutool.core.util.StrUtil;
import lombok.Data;

import java.io.Serializable;

/**
 * 支付宝退款请求参数
 *
 * @author 周广明
 * @version v1 12/20/19 11:31 AM
 */
@Data
public class AliPayRefundModel implements Serializable {
    private static final long serialVersionUID = -960902335852879627L;

    /**
     * 标识一次退款请求，同一笔交易多次退款需要保证唯一，如需部分退款，则此参数必传。
     * <p>
     * 如需部分退款，则此参数必传！
     */
    private String outRequestNo;

    /**
     * 支付宝交易号，和商户订单号不能同时为空
     */
    private String tradeNo;

    /**
     * 订单支付时传入的商户订单号,不能和 trade_no同时为空。
     */
    private String outTradeNo;

    /**
     * 需要退款的金额，该金额不能大于订单金额,单位为元，支持两位小数
     * <p>
     * 必填
     */
    private String refundAmount;

    /**
     * 退款的原因说明
     * <p>
     * 非必填
     */
    private String refundReason;

    /**
     * 商户的操作员编号
     * <p>
     * 非必填
     */
    private String operatorId;

    /**
     * 商户的门店编号
     * <p>
     * 非必填
     */
    private String storeId;

    /**
     * 商户的终端编号
     * <p>
     * 非必填
     */
    private String terminalId;

    /**
     * @param outRequestNo 退款请求标识
     * @param tradeNo      支付宝交易号
     * @param outTradeNo   订单支付时传入的商户订单号
     * @param refundAmount 退款金额
     */
    public AliPayRefundModel(String outRequestNo, String tradeNo, String outTradeNo, String refundAmount) {

        if (StrUtil.isBlank(tradeNo) && StrUtil.isBlank(outTradeNo)) {
            throw new IllegalArgumentException("支付宝交易号，和商户订单号不能同时为空！");
        }

        this.outRequestNo = outRequestNo;
        this.tradeNo = tradeNo;
        this.outTradeNo = outTradeNo;
        this.refundAmount = refundAmount;
    }
}
